// 矩阵变换相关类型定义

export interface Point2D {
  x: number;
  y: number;
}

export interface Vector2D extends Point2D {
  // 向量可以包含额外的属性，如方向信息
}

export interface Transform2D {
  a: number; // 缩放和旋转分量
  b: number; // 倾斜分量
  c: number; // 倾斜分量
  d: number; // 缩放和旋转分量
  e: number; // X轴平移
  f: number; // Y轴平移
}

export interface Matrix2DConfig {
  transform: Transform2D;
}

export interface TransformOptions {
  // 变换选项
  origin?: Point2D; // 变换原点
  preserveScale?: boolean; // 是否保持比例
}

export interface ScaleOptions extends TransformOptions {
  sx: number; // X轴缩放比例
  sy: number; // Y轴缩放比例
}

export interface RotateOptions extends TransformOptions {
  angle: number; // 旋转角度（弧度）
}

export interface TranslateOptions {
  tx: number; // X轴平移距离
  ty: number; // Y轴平移距离
}

export interface ShearOptions extends TransformOptions {
  shx: number; // X轴倾斜角度
  shy: number; // Y轴倾斜角度
}

// 变换类型枚举
export enum TransformType {
  TRANSLATE = 'translate',
  ROTATE = 'rotate',
  SCALE = 'scale',
  SHEAR = 'shear',
  MATRIX = 'matrix',
}

// 变换历史记录
export interface TransformHistory {
  type: TransformType;
  matrix: Transform2D;
  timestamp: number;
  description?: string;
}

// 变换结果
export interface TransformResult<T> {
  original: T;
  transformed: T;
  matrix: Transform2D;
  type: TransformType;
}
